package com.leetcode.array;

/**
 * @author: ZhouBert
 * @date: 2019/10/17
 * @description: 242. 有效的字母异位词
 * 给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的字母异位词。
 * <p>
 * 示例 1:
 * 输入: s = "anagram", t = "nagaram"
 * 输出: true
 * 示例 2:
 * 输入: s = "rat", t = "car"
 * 输出: false
 * 说明:
 * 你可以假设字符串只包含小写字母。
 * <p>
 * 进阶:
 * 如果输入字符串包含 unicode 字符怎么办？你能否调整你的解法来应对这种情况？
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/valid-anagram
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class ValidAnagram242 {

	/**
	 * 我的解法：
	 * 1.利用两个数组（字符哈希），比较两个数组是否相同--》可以优化成一个数组，最后比较元素是否都为0！
	 * 2.通过质数（但是要写26个字母实在太麻烦了！）
	 * todo:3、排序 + 数组比较
	 * @param s
	 * @param t
	 * @return
	 */
	public static boolean isAnagram(String s, String t) {
		if (s == null && t == null) {
			return true;
		}
		boolean isFlag = (s == null && t != null) || (s != null && t == null);
		if (isFlag) {
			return false;
		}
		if (s.length() != t.length()) {
			return false;
		}

		int[] sArr = new int[26];
		int[] tArr = new int[26];
		for (int i = 0; i < s.length(); i++) {
			sArr[s.charAt(i) - 'a']++;
		}
		for (int i = 0; i < t.length(); i++) {
			tArr[t.charAt(i) - 'a']++;
		}
		for (int i = 0; i < 26; i++) {
			if (tArr[i] != sArr[i]) {
				return false;
			}
		}
		return true;
	}

	public static void main(String[] args) {
		int i = (int) ('a' - 'a');
		System.out.println(i);

	}
}
